#include <stdio.h>

int main() {
//  3.在没有第三个变量的情况下交换a = 5, b = 3,的值

//  a ^ a == 0;(核心)
//  a ^ 0 == a;(核心)

    // 方法一:加减交替
    {
        int a = 5;
        int b = 3;
        a = a + b;
        b = a - b;
        a = a - b;
    }
    //缺陷:当数字过大时，会有溢出的可能
    //方法二:异或^三次
    {
        int a = 5;
        int b = 3;
        a = a ^ b; // a = 110
        b = a ^ b; // b = 101 (b ^ b == 0, a ^ 0 == a)
        a = a ^ b; // a = 011 (a ^ b ^ a == b)
        printf("a = %d\nb = %d", a, b);
    }
    return 0;
}